const mongoose = require('mongoose'); //获取mongoose
const db = 'mongodb://localhost/simle-db' //链接数据库，没有则创建一个

const glob = require('glob')
const {resolve} = require('path')

exports.initSchemas = () =>{
    glob.sync(resolve(__dirname,'./schema/','**/*.js')).forEach(require)
}

exports.connect = ()=>{
    //链接数据库
    mongoose.connect(db)

    let maxConnectTimes = 0

    //使用Promise 确保先连接数据库后，再作其他事情
    return new Promise((resolve,reject)=>{
        //增加数据库链接的检听事件  链接时的事件（disconnected）
        mongoose.connection.on('disconnected',()=>{
            console.log("*************数据库断开***************"+maxConnectTimes)
            //重新链接
            if(maxConnectTimes<3){
                maxConnectTimes++
                mongoose.connect(db)
                console.log("*******重新连接*******")
            }else{
                reject()
                throw new Error("数据库有问题，程序无法解决，请人修理")
            }
        })

        //数据库出现错误时
        mongoose.connection.on('error',(err)=>{
            console.log("*************数据库断开***************"+maxConnectTimes+"&&&&&")
            //重新链接
            if(maxConnectTimes<3){
                maxConnectTimes++
                mongoose.connect(db)
                console.log("*******重新连接*******")
            }else{
                reject(err)
                throw new Error("数据库有问题，程序无法解决，请人修理")
            }
        })

        //链接打开时间
        mongoose.connection.on('open',()=>{
            console.log("MongoDB success")
            resolve()
        })
    })

    
}

